package com.powergame.model;

import com.powergame.exceptions.PowerGameException;
import java.util.ArrayList;
import java.util.List;

/**
 * Joueur.java
 *
 * Modélise une équipe
 *
 * @author ToF
 */
public class Joueur {
    
    /** Lien vers le controlleur */
    private Jeu jeu = null;
    
    /** Identifiant du joueur */
    private String nom = null;
    
    /** Couleur */
    private Equipe equipe = null;
    
    /** Valeur/Puissance en réserve */
    private int power = 0;
    
    /** La réserve de pièce */
    private Secteur reserve = null;
    
    /** Toutes les pièces qui appartiennent au joueur */
    private List<Piece> pieces = null;
    
    /** Les ordres de jeu */
    private FeuilleOrdres ordres = null;
    
    /** Création de pièces du joueur */
    private PiecesFactory fabriquePieces = null;
    
    public Joueur(Jeu jeu, String nom, Equipe equipe){
        this.jeu = jeu;
        this.nom = nom;
        this.equipe = equipe;
    }

    public Equipe getEquipe() {
        return equipe;
    }

    public void setEquipe(Equipe equipe) {
        this.equipe = equipe;
        fabriquePieces = new PiecesFactory(equipe);
    }

    public Jeu getJeu() {
        return jeu;
    }

    public void setJeu(Jeu jeu) {
        this.jeu = jeu;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public FeuilleOrdres getOrdres() {
        if(ordres == null){
            ordres = new FeuilleOrdres(this);
        }
        return ordres;
    }

    public void setOrdres(FeuilleOrdres ordres) {
        this.ordres = ordres;
    }

    public List<Piece> getPieces() {
        if(pieces == null){
            pieces = new ArrayList<Piece>();
        }
        return pieces;
    }

    public void setPieces(List<Piece> pieces) {
        this.pieces = pieces;
    }

    public int getPower() {
        return power;
    }

    public void setPower(int power) {
        this.power = power;
    }

    public Secteur getReserve() {
        if(reserve == null){
            reserve = new Secteur(null, "RES", TypeSecteur.SECTEUR_RESERVE, equipe);
        }
        return reserve;
    }

    public void setReserve(Secteur reserve) {
        this.reserve = reserve;
    }

    public PiecesFactory getFabriquePieces() {
        return fabriquePieces;
    }

    public void setFabriquePieces(PiecesFactory fabriquePieces) {
        this.fabriquePieces = fabriquePieces;
    }
    
    /**
     * Ajoute une nouvelle pièce à la réserve du joueur 
     * 
     * @param piece 
     */
    public void addPiece(Piece piece){
        piece.setEquipe(getEquipe());
        getPieces().add(piece);
        
        piece.setPosition(getReserve());
    }

    public void ajouteOrdre(Ordre ordre) throws PowerGameException {
        getOrdres().ajouteOrdre(ordre);
    }
    
    @Override
    public boolean equals(Object o) {
        Equipe e = ((Joueur)o).getEquipe();
                
        return e.equals(o);
    }

    public Ordre getOrdres(int no) {
        int n = 1;
        for(Ordre o : getOrdres().getOrdres()){
            if(no == n){
                return o;
                
            }else{
                n++;
            }
        }
        return null;
    }
}
